package com.kaoshi.myweb.webtest.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;

//JobDataMap的持久化 即PersistJobDataAfterExecution这个注解的使用。
//加上注解之后，每次执行完，JobDataMap都会被序列化，上次任务执行放入的值都会保存下来。
@PersistJobDataAfterExecution
public class ParaJob implements Job {
	// 静态变量  
    public static final String FAVORITE_COLOR = "favorite color";  
    public static final String EXECUTION_COUNT = "count";  
    
    // Quartz 将每次将会重新实例化对象 ，非静态的成员变量不能用来保持状态  
    private int _counter = 1;  
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		// job 的名字  
        String jobName = context.getJobDetail().getKey().getName();  
        // 任务执行的时间  
        SimpleDateFormat dateFormat = new SimpleDateFormat(  
                "yyyy 年 MM 月 dd 日  HH 时 mm 分 ss 秒");  
        String jobRunTime = dateFormat.format(Calendar.getInstance().getTime());  
  
        // 获取 JobDataMap , 并从中取出参数   
       JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
       String favoriteColor = jobDataMap.getString(FAVORITE_COLOR);
       int count = jobDataMap.getInt(EXECUTION_COUNT);
        
        System.out  
                .println("ColorJob: " + jobName + " 在 " + jobRunTime + " 执行了 ...  \n"  
                        + "      喜欢的颜色是：  " + favoriteColor + "\n"  
                        + "      执行次数统计(from job jobDataMap)： " + count + "\n"  
                        + "      执行次数统计( from job 类的成员变 量 ): "  
                        + _counter+ " \n ");  
        // 每次+1 并放回Map 中  
        count++;  
        jobDataMap.put(EXECUTION_COUNT, count);  
        
        _counter++;
	}

}
